const express = require("express")
const MenuController = require("../../controllers/MenuController")
const router = express.Router()

/**
 * @api {get} /system/menu 查询菜单
 * @apiName find-menu
 * @apiGroup Menu
 * @apiVersion 0.1.0

 * @apiParam  {String} [name] 菜单名称.
 * @apiParam  {Boolean} [status] 菜单状态.
 * @apiParam  {Boolean} [link] 是否外链.
 * @apiParam  {Boolean} [type] 菜单类型.
 *
 * @apiSuccess {String} code 状态码.
 * @apiSuccess {String} msg  提示消息.
 * @apiSuccess {Null} data  返回数据.
 *
 * @apiParamExample  {type} 请求示例:
 * 
 * {
 *      name:"用户管理"
 * }
 * 
 * @apiSuccessExample 成功返回结果:
 * 
 *  {
 *       code:"200",
 *       msg:"菜单查询成功",
 *       data:data,
 *       total:total
 *  }
 *
 * @apiError {String} code 状态码.
 * @apiError {String} msg  提示消息.
 * @apiError {Null} data  返回数据.
 *
 * @apiErrorExample 错误返回结果:
 *   
 *   {
 *       code:"400",
 *       msg:"菜单查询失败",
 *       data:null
 *   }
 */
/**
 * @api {post} /system/menu 添加目录
 * @apiName append-directory
 * @apiGroup Menu
 * @apiVersion 0.1.0
 *
 * @apiParam  {String} type=directory 菜单类型 必填项.
 * @apiParam  {String} parentid 父级ID 必填项 无父级则为 "0".
 * @apiParam  {String} name 菜单名称 必填项.
 * @apiParam  {Boolean} status 菜单状态 必填项.
 * @apiParam  {Number} [sort] 菜单排序.
 * @apiParam  {String} [icon] 菜单图标.
 *
 * @apiSuccess {String} code 状态码.
 * @apiSuccess {String} msg  提示消息.
 * @apiSuccess {Null} data  返回数据.
 *
 * @apiParamExample  {type} 请求示例:
 * 
 * {
 *      type:"directory",
 *      parentid:"0",
 *      name:"系统管理",
 *      status:true,
 *      sort:1,
 *      icon:"system"
 * }
 * 
 * @apiSuccessExample 成功返回结果:
 * 
 *  {
 *       code:"200",
 *       msg:"菜单添加成功",
 *       data:null,
 *  }
 *
 * @apiError {String} code 状态码.
 * @apiError {String} msg  提示消息.
 * @apiError {Null} data  返回数据.
 *
 * @apiErrorExample 错误返回结果:
 *   
 *   {
 *       code:"400",
 *       msg:"菜单添加失败",
 *       data:null
 *   }
 */
/**
 * @api {post} /system/menu 添加菜单
 * @apiName append-menu
 * @apiGroup Menu
 * @apiVersion 0.1.0
 *
 * @apiParam  {String} type=menu 菜单类型.
 * @apiParam  {String} parentid 父级ID 必填项 无父级则为 "0".
 * @apiParam  {String} name 菜单名称 必填项.
 * @apiParam  {Boolean} status 菜单状态 必填.
 * @apiParam  {Number} [sort] 菜单.
 * @apiParam  {String} [icon] 菜单图标.
 * @apiParam  {String} component 组件路径 必填项.
 * @apiParam  {Boolean} [link] 是否外链.
 * @apiParam  {Boolean} [cache] 是否缓存.
 * @apiParam  {Number} path 路由地址 必填项.
 *
 * @apiSuccess {String} code 状态码.
 * @apiSuccess {String} msg  提示消息.
 * @apiSuccess {Null} data  返回数据.
 *
 * @apiParamExample  {type} 请求示例:
 * 
 * {
 *      type:"menu",
 *      parentid:"123456789",
 *      name:"用户管理",
 *      path:"/system/user",
 *      component:"@/views/system/user/index.vue"
 *      link:false,
 *      cache:false,
 *      sort:1,
 *      icon:"user"
 * }
 * 
 * @apiSuccessExample 成功返回结果:
 * 
 *  {
 *       code:"200",
 *       msg:"菜单添加成功",
 *       data:null,
 *  }
 *
 * @apiError {String} code 状态码.
 * @apiError {String} msg  提示消息.
 * @apiError {Null} data  返回数据.
 *
 * @apiErrorExample 错误返回结果:
 *   
 *   {
 *       code:"400",
 *       msg:"菜单添加失败",
 *       data:null
 *   }
 */
/**
 * @api {post} /system/menu 添加按钮权限
 * @apiName append-button
 * @apiGroup Menu
 * @apiVersion 0.1.0
 *
 * @apiParam  {String} type=button 菜单类型 必填项.
 * @apiParam  {String} parentid 父级ID 必填项 无父级则为 "0".
 * @apiParam  {String} name 菜单名称 必填项.
 * @apiParam  {Number} [sort] 菜单排.
 * @apiParam  {String} permission 权限标识 必填项.
 *
 * @apiSuccess {String} code 状态码.
 * @apiSuccess {String} msg  提示消息.
 * @apiSuccess {Null} data  返回数据.
 *
 * @apiParamExample  {type} 请求示例:
 * 
 * {
 *      type:"button",
 *      parentid:"123456789a",
 *      name:"新增",
 *      permission:"system:user:add",
 *      sort:1,
 * }
 * 
 * @apiSuccessExample 成功返回结果:
 * 
 *  {
 *       code:"200",
 *       msg:"菜单添加成功",
 *       data:null,
 *  }
 *
 * @apiError {String} code 状态码.
 * @apiError {String} msg  提示消息.
 * @apiError {Null} data  返回数据.
 *
 * @apiErrorExample 错误返回结果:
 *   
 *   {
 *       code:"400",
 *       msg:"菜单添加失败",
 *       data:null
 *   }
 */
/**
 * @api {put} /system/menu 修改菜单
 * @apiName  modify-menu
 * @apiGroup Menu
 * @apiVersion 0.1.0
 *
 * @apiParam  {String} _id 菜单ID.
 *
 * @apiSuccess {String} code 状态码.
 * @apiSuccess {String} msg  提示消息.
 * @apiSuccess {Null} data  返回数据.
 *
 * @apiParamExample  {type} 请求示例:
 * 
 * {
 *      _id:"123456"
 *      ....当前需要修改的菜单的数据
 * }
 * 
 * @apiSuccessExample 成功返回结果:
 * 
 *  {
 *       code:"200",
 *       msg:"菜单修改成功",
 *       data:null,
 *  }
 *
 * @apiError {String} code 状态码.
 * @apiError {String} msg  提示消息.
 * @apiError {Null} data  返回数据.
 *
 * @apiErrorExample 错误返回结果:
 *   
 *   {
 *       code:"400",
 *       msg:"菜单修改失败",
 *       data:null
 *   }
 */
/**
 * @api {delete} /system/menu/:id 删除菜单
 * @apiName remove-menu
 * @apiGroup Menu
 * @apiVersion 0.1.0
 *
 * @apiParam  {String} _id 菜单的唯一标识 必填项.
 *
 * @apiSuccess {String} code 状态码.
 * @apiSuccess {String} msg  提示消息.
 * @apiSuccess {Null} data  返回数据.
 *
 * 
 * @apiSuccessExample 成功返回结果:
 * 
 *  {
 *       code:"200",
 *       msg:"菜单删除成功",
 *       data:null
 *  }
 *
 * @apiError {String} code 状态码.
 * @apiError {String} msg  提示消息.
 * @apiError {Null} data  返回数据.
 *
 * @apiErrorExample 错误返回结果:
 *   
 *   {
 *       code:"400",
 *       msg:"菜单删除失败",
 *       data:null
 *   }
 
 */
router.get("/system/menu", MenuController.find)
router.post("/system/menu", MenuController.append)
router.put("/system/menu", MenuController.update)
router.delete("/system/menu/:id", MenuController.remove)
module.exports = router